import java.util.HashMap;
import java.util.Map.Entry;

public class MeilleurFirst extends GraphSearch{

	
	public MeilleurFirst(HashMap<Noeud, HashMap<Noeud,Integer>> s){
		super(s);
		heuristique = new HashMap<Noeud, Integer>();
	}
	
	/*
	 * Calcule l'heuristique pour un noeud donné
	 * Elle retourne le nombre de cases qui ne sont pas à leur place
	 * 
	 */
	public int getHeuristique(Noeud noeud){
		int h=0;
		int[] seq = noeud.getSequence();
		int[] seqFinal = noeudFin.getSequence();
		
		for(int i=0; i<seq.length; i++){
			if(seq[i]!=seqFinal[i]){
				h++;
			}
		}
		heuristique.put(noeud, h);
		
		return h;
	}
	
	public void mettreDansOpen(Noeud p, int val){
		int heuristique = getHeuristique(p);
		open.put(p, val+heuristique);
	}
		
	protected Noeud choisir(HashMap<Noeud, Integer> o){
		Integer min = null;
		Noeud retour = null;
		for(Entry<Noeud, Integer> entry : o.entrySet()){
			Noeud p = entry.getKey();
			//Integer v = getHeuristique(p);
			Integer v = getHeuristique(p);
			
			if(min == null || v < min){
				retour = p;
				min = v;
			}
		}
		
		return retour;
	}

}
